Die „Freie Datenmanipulation“ ist eines der mächtigsten Werkzeuge von ingenious.V12. Der„Scripteditor“ bietet alle Möglichkeiten, um Scripte schnell erstellen und ausführen zu können.
Bei der Erstellung von Scripten unterscheidet man zwischen gespeicherten und automatischen Prozeduren. Der Unterschied besteht in der Anwendung und Ausführung der Scripte. Während gespeicherte Prozeduren allgemein einem Modul zugeordnet werden und dort über Listenansicht abrufbar sind, werden automatische Prozeduren an bestimmte Arbeitsschritte eines Moduls angehangen und dann automatisch ausgeführt, wenn dieser Arbeitsschritt erfolgt. Beispielsweise nach dem Öffnen eines Moduls, dem Speichern einer Funktion, der Ausführung einer Suche oder dem Druck eines Dokuments. Um automatische Prozeduren anlegen und bearbeiten zu können, muss zunächst das entsprechende Benutzerrecht freigeschaltet werden.
Die folgenden Übungen werden anhand von Beispielscripten gespeicherter Prozeduren dargestellt. Die Anwendung der automatischen Prozeduren ist analog.
Übung zum Erstellen von Scripten
1. Klicken Sie in der Symbolleiste auf die Schaltfläche um ein neues Script zu erstellen.
2. Als nächstes geben Sie dem Script einen Methodennamen.
Fenster um Script zu benennen
3. Erstellen Sie Ihr Script im Scriptbereich.
CW_SetPrefs
CW_SetDate (Current date(*))
CW_OpenDialog
If (OK=1)
QUERY([Projekte];[Projekte]Gedruckt am=cwSelectDate)
End if
Im dargestellten Beispiel sehen Sie nähere Erläuterungen zu den Scriptbefehl, welche mit //# eröffnet werden und bei der Scriptausführung keine Berücksichtigung finden.
Sie können Scripte entweder mit der Tastatureingabe oder mit Mausklicks auf Schlüsselwörter, Adressen und Befehle zusammenstellen.
4. Sichern Sie Ihr Script mit der Schaltfläche , bevor Sie es zum ersten Mal ausführen.
5. Um später das Script zu starten, genügt ein Klick auf die Schaltfläche .
Scripte, die Daten verändern (Datensätze löschen, erstellen, aktualisieren), werden von ingenious.V12 automatisch erkannt und ihre Ausführung nur mit einem Sicherheitsschlüssel erlaubt. Diesen einmaligen Freigabecode bekommen Sie nach Prüfung des Scripts durch die Ingenious GmbH mitgeteilt. Achten Sie darauf, dass nur Personen mit genügend Fachwissen Scripte erstellen und ausführen.
Warnhinweis: Scripte ermöglichen den Zugriff auf interne Daten außerhalb der ingenious.V12 Benutzerrechte.
Weiterhin ist es möglich, die Scripte bestimmten Modulen zuzuweisen. Somit können dann nur noch Personen, welche auch die entsprechenden Modulrechte besitzen, die Scripte ausführen.
In dem Fall, dass ein Scriptinhalt einmal fehlerhaft, oder unvollständig ist, erscheint folgende Fehlermeldung. Sie können die Prozedur daraufhin abbrechen und den Fehler ausbessern:
Übung zum Zuweisen von Scripten
1. Markieren Sie den Script „Test 1“ und wählen Sie das Menü „Script/Scriptzuordnung“.
2. Weisen Sie dem Script per Drag & Drop die gewünschten Module zu und klicken Sie auf die Schaltfläche „OK“.
Die Scripte stehen nun jedem mit dem entsprechenden Modulrecht zu. Die Rechtvergabe dazu erfolgt in der Registerkarte „Benutzerrechte“ der Benutzerverwaltung.
Dem autorisierten Benutzer steht in der Listenansicht des Moduls ein neuer Ordner „Scripte“ zur Verfügung. Hier findet er alle ihm zur Verfügung stehenden Scripte. Die Ausführung erfolgt nur durch das Anklicken des Scripts. Um ein Script von der Ingenious GmbH prüfen zu lassen, muss es zuerst exportiert werden.
Achtung: Bei der Zuweisung von Scripten automatischer Prozeduren können Sie festlegen, bei welchen Arbeitsschritt das Script automatisch ausgeführt werden soll.
Übung zum Exportieren von Scripten
1. In der Freien Datenmanipulation exportieren Sie mit einem Klick auf die Schaltfläche das Script in eine Textdatei.
Es folgt das Windows-Standardfenster um Dateien abzuspeichern.
2. Geben Sie der Exportdatei einen Namen und setzen Sie die Prozedur mit der Schaltfläche „Speichern“ in Gang.
Wenn Sie die Datei gespeichert haben, finden Sie jetzt ein entsprechendes Icon.
Um einen Sicherheitsschlüssel für dieses Script zu bekommen, schicken Sie diese Datei zur Ingenious GmbH. Wurde Ihr Script korrigiert, bekommen Sie eine neue Textdatei (Neues Script) und eine zweite Datei mit dem Sicherheitsschlüssel zugeschickt.
Übung zum Importieren von Scripten
1. Klicken Sie auf die Schaltfläche und öffnen Sie die gewünschte Datei im Windowsdialogfenster.
Falls die Datei einen Sicherheitsschlüssel besitzt, müssen Sie diesen in das entsprechende Feld eintragen/kopieren und auf die Schaltfläche klicken.
Um das Script nochmals auszuführen, benötigen Sie wieder einen neuen Sicherheitsschlüssel.
Achtung: Da diese Scripte nur mit internen Kenntnissen über Zusammenhänge in komplexen Datenbanksystemen erstellt werden können, sollten nur qualifizierte Personen Zugang zu diesem Modul bekommen. Aber natürlich stehen Ihnen auch hier die Mitarbeiter der Ingenious GmbH bei der Erstellung von individuellen Scripten gern zur Verfügung.
Über den Menüpunkt Script à Scrpitordner importieren und à Scriptordner exportieren, können ganze Ordner geladen oder ausgegeben werden:
Excec_Script
Exec_Script ist ein externer Befehl zur Ausführung von Scripten an beliebigen Stellen, die 4D Code erlauben, beispielsweise Write- und View-Dokumente. Exec_Script kann jedoch auch direkt als Platzhalter {Exec_Script("Scriptname";"Param1";"Param_N")} verwendet werden. Auf diese Weise lassen sich Textbausteine und Scripte dynamisch zusammensetzen, was die Flexibilität von ingenious.V12 steigert.
Wichtig: Innerhalb des Scriptes muss der Ausgabebefehl "Result=" verwendet werden. Zur Veranschaulichung folgt eine kurze Übung:
1. Öffnen Sie die Freie Datenmanipulation und legen Sie bei den automatischen Prozeduren ein neues Script "TestWrite" mit dem Inhalt "Result:="Gespeicherte Projekte: "+String(records in table([Projekte]))" an. Anhand dieses Scriptes soll die Anzahl der gespeicherten Projekte in Ingenious.V12 ausgegeben werden.
Variante 1 als 4D Ausdruck
2. Wechseln Sie nun in die Textbausteinverwaltung und legen Sie im Bereich "Freie Texte" einen neuen Textbaustein "Test" an.
3. Wählen Sie im Menü "Einfügen" die Option "4D Ausdruck...". Im erscheinenden Fenster gehen Sie auf die Registerkarte "Ausdruck" und klicken auf den Button "Bearbeiten...".
4. Es öffnet sich der Formeleditor. Geben Sie im oberen Bereich den Befehl "EXEC_Script("TestWrite")" ein und bestätigen Sie Ihre Eingabe mit "OK".
5. Im 4D Ausdruck-Fenster wird nun der angelegte Befehl angezeigt. Klicken Sie auf "Ok", um ihn in den Textbaustein einzufügen.
6. Klicken Sie nun im Menü "Anzeigen" auf die Option "Referenzen", wird das von Ihnen angelegte Script ausgeführt.
Variante 2 als Platzhalter
2. Legen Sie in der Textbausteinverwaltung im Bereich "Projektvorlagen" eine neue Vorlage "Test2" an.
3. Tragen Sie nun den Platzhalter "{Exec_Script("TestWrite")}" ein, speichern und verlassen Sie die Textbausteinverwaltung.
In der Druckvorschau der Projektvorlage wird der Platzhalter aufgelöst.
Benutzerdefinierte Listen
Benutzerdefinierte Listen (Sidebars) sind flexibel konfigurierbare Steuerelemente zur schnelleren Eingabe verschiedener Felder in die Detailansicht der jeweiligen Modulen. Das Anlegen benutzerdefinierter Listen ist im Kontakte-Modul, den Workflow-Modulen und bei den Artikeln möglich.
Achtung: Um die benutzerdefinierten Listen im Kontakte-Modul nutzen zu können, müssen Sie zunächst die entsprechenden Benutzerrechte freischalten. Bei den anderen Modulen benötigen Sie zu diesem Zweck kein gesondertes Benutzerrecht.
Erstellen Sie einfach in der Freien Datenmanipulation unter der Rubrik "Automatische Prozeduren" das entsprechende Script und ordnen Sie es dem gewünschten Modul zu. Bei der Erstellung individueller Scripte stehen Ihnen natürlich auch die Mitarbeiter der Ingenious GmbH gern zur Verfügung.
Folgende Parameter/Werte sind möglich:
Parameter |
Werte |
Anmerkungen |
LINES |
Ganzzahl Bsp. "10" |
Die Anzahl der Ausgabezeile der Tabelle. Dient zur Initialisierung und muss vor allen anderen Befehlen ausgeführt werden. "Zeile" kann leer sein/wird nicht benötigt. |
_WIDTH |
Ganzzahl Bsp. "300" |
Breite der Tabelle in Pixel, wenn nicht angegeben: Defaultwert von 300. "Zeile" kann leer sein/wird nicht benötigt. |
_SPLIT |
Zahl; Zahl Bsp. "15;20" |
Aufteilung der Spalten im Verhältnis von Zahl1 zu Zahl2 "Zeile" kann leer sein/wird nicht benötigt. |
NAME |
Text Bsp. "Firma/Name" |
Bezeichnung der aktuellen Zeile (linke Spalte) |
FORECOLOR |
Farbe oder RGB (Zahl1,Zahl2,Zahl3) Bsp. "RGB(120,220,170)" |
Einfärbung des Textes in der linken Spalte (Bezeichnung) Verfügbare Farben: red, green, blue, white, black, yellow oder RGB-Werte |
BACKCOLOR |
Farbe oder RGB (Zahl1,Zahl2,Zahl3) Bsp. "red" |
Einfärbung des Textes in der linken Spalte (Bezeichnung) Verfügbare Farben: red, green, blue, white, black, yellow oder RGB-Werte |
BIND |
Feld in der Datenbank Bsp. "[Kontakte]Name" |
Angezeigter/Änderbarer Wert (rechte Spalte) In der 1. Version der UserList kann nur die Tabelle [Kontakte] verwendet werden. Die Anbindung an eine generische Tabelle mit beliebig vielen frei definierbaren Feldern ist vorgesehen. Wird kein Bind angegeben, wird ein angebundenes Script beim Laden der Tabelle ausgeführt und der Rückgabewert angezeigt. |
CONTROL |
Vorgegebene Auswahl Bsp. "Date" |
Folgende Werte für Eingabearten sind verfügbar: Liste = Combo Box (nur 4D 2003, in 2004 wie Feste Liste) Feste Liste = Drop Down Menü die verfügbaren Einträge werden per VALUELIST übergeben (siehe Abschnitt VALUELIST) Button = Button der verschiedene Aktionen auslösen kann (siehe Abschnitt ACTION) Boolean = Check Box Text = einfaches Textfeld, kann mehrzeilig sein (siehe Abschnitt ROWCOUNT) Integer = Ganzzahl Float = Kommazahl Date = Datum Time = Zeit ReadOnly = nur Ausgabe, keine Eingabemöglichkeit Erfolgt eine Eingabe in einem falschen Format wird die Zeile beim Bestätigen/Verlassen automatisch richtig formatiert. |
Ganzzahl Bsp. "3" |
Legt die Höhe der angegebenen Zeile fest. Bei Textfeldern ist damit eine mehrzeilige Eingabe möglich. | |
ACTION |
Vorgegebene Auswahl Bsp. "Script" |
Folgende Werte sind verfügbar: Script = führt ein bestimmtes Script aus. Der Scriptname muss als Parameter in dir VALUELIST übergeben werden. Selectionlist = öffnet ein Pop Up Fenster mit einer Auswahlliste. Die Werte der Auswahlliste müssen per VALUELIST übergeben werden. Multiselection = öffnet ein Pop Up Fenster für eine Mehrfachauswahl. Die Werte für die Mehrfachauswahlliste sowie das Trennzeichen müssen per VALUELIST übergeben werden. Die Aktion "Script" kann für die meisten Zeilentypen (Text, Datum, Zeit, usw.) verwendet werden. Scripte die an einen Button gebunden sind, werden durch Klick auf den Button oder durch Return gestartet. Scripte für ReadOnly Feldern werden beim Erzeugen der Tabelle und beim Betätigen von Return gestartet. Für alle anderen einfachen Felder werden die Scripte nach Datenänderung ausgeführt. Die Script-Variable Param1 enthält die aktuelle Benutzereingabe. Soll diese Eingabe vom Script abgeändert werden, muss die Script-Variable Result mit dem gewünschten Rückgabewert gefüllt werden. Die Aktionen "Selectionlist" und "Multiselection" können nur an Buttons gebunden werden. |
VALUELIST |
Scriptname oder Werteliste |
Enthält den Scriptname für die Aktionen "Script" oder eine Liste von Werten für Combo Box, Drop Down Menü, Selectionlist oder Multiselection. Als Trennzeichen für die einzelnen Werte der Werteliste ist ein Zeilenumbruch (Char 13), ein Semikolon oder ein Komma möglich. Bei Action "Multiselection" kann der API Funktion UserList noch ein 4. Parameter für das Trennzeichen im verknüpften Feld übergeben werden. |
Die Definition der Tabelle geschieht mittels der API Schnittstellenfunktion UserList("Zeile";"Parameter";"Wert")
Beispiel:
Bei der Umstellung von der einfachen auf die erweiterte Namenseingabe in den Programmeinstellungen wird das Textfeld Name/Firma ausgeblendet und die Einzelfelder Name/Vorname/Firma1/Firma2/... eingeblendet. Um in bestehenden Kontakten das alte Namensfeld anzeigen zu lassen ist folgendes Script beim Öffnen von Kontakten auszuführen:
If (([Kontakte]Name#"") & ([Kontakte]Nachname="") & ([Kontakte]Vorname="") & ([Kontakte]Firma1="") & ([Kontakte]Firma2="") & ([Kontakte]Titel=""))
UserList ("";"LINES";"1")
UserList ("";"_WIDTH";"500")
UserList ("";"_SPLIT";"15;35")
UserList ("1";"NAME";"ALT: Firma/Name")
UserList ("1";"BIND";"[Kontakte]Name")
UserList ("1";"CONTROL";"Text")
UserList ("1";"ROWCOUNT";"5")
End If
Die Definition der angezeigten Zeilen geschieht per Script beim Öffnen der Kontakte Detailansicht, was Sie in der Menü "Script - Scriptzuordnung" festlegen. Werden bei Öffnen keine Zeilen definiert oder ist das erforderliche Benutzerrecht (101130) nicht vorhanden wird das Steuerelement ausgeblendet und die Standardansicht wird verwendet.
Alte Kontakte werden nun wie im folgenden Screenshot angezeigt:
Mit den individuellen Skripten können eigene Formulare und Funktionen programmiert werden.
Beispiel Code für Formulare:
Generic selection |
Kopiere Code |
---|---|
ARRAY TEXT(aObjectType;12) ARRAY TEXT(aObjectValue;12) ARRAY LONGINT(aObjectPos;12;4) ARRAY TEXT(aResults;0) aObjectType{1}:="Groupbox" aObjectValue{1}:="new entry form" aObjectPos{1}{1}:=5 // left aObjectPos{1}{2}:=3 // top aObjectPos{1}{3}:=435 // right aObjectPos{1}{4}:=100 // bottom aObjectType{2}:="Label" aObjectValue{2}:="Entry 1 Text / Check:" aObjectPos{2}{1}:=15 aObjectPos{2}{2}:=25 aObjectPos{2}{3}:=140 aObjectPos{2}{4}:=40 aObjectType{3}:="Label" aObjectValue{3}:="Entry 2 Dropdown:" aObjectPos{3}{1}:=15 aObjectPos{3}{2}:=50 aObjectPos{3}{3}:=140 aObjectPos{3}{4}:=65 aObjectType{4}:="Label" aObjectValue{4}:="Entry 3 Date / Icon:" aObjectPos{4}{1}:=15 aObjectPos{4}{2}:=75 aObjectPos{4}{3}:=140 aObjectPos{4}{4}:=90 aObjectType{5}:="Text" // Text aObjectValue{5}:="9:20" aObjectPos{5}{1}:=150 aObjectPos{5}{2}:=25 aObjectPos{5}{3}:=285 aObjectPos{5}{4}:=40 aObjectType{6}:="Dropdown" aObjectValue{6}:="Value2;Value1;Value2;Value3" aObjectPos{6}{1}:=150 aObjectPos{6}{2}:=48 aObjectPos{6}{3}:=285 aObjectPos{6}{4}:=66 aObjectType{7}:="Date" aObjectValue{7}:="1.1.2013" aObjectPos{7}{1}:=150 aObjectPos{7}{2}:=75 aObjectPos{7}{3}:=240 aObjectPos{7}{4}:=90 aObjectType{8}:="Checkbox" aObjectValue{8}:="True" aObjectPos{8}{1}:=300 aObjectPos{8}{2}:=25 aObjectPos{8}{3}:=425 aObjectPos{8}{4}:=40 aObjectType{9}:="Combobox" aObjectValue{9}:="Value99;Value4;Value5;Value6" aObjectPos{9}{1}:=300 aObjectPos{9}{2}:=48 aObjectPos{9}{3}:=425 aObjectPos{9}{4}:=66 aObjectType{10}:="Icon" aObjectValue{10}:="25885" aObjectPos{10}{1}:=300 aObjectPos{10}{2}:=70 aObjectPos{10}{3}:=324 aObjectPos{10}{4}:=94 aObjectType{11}:="OK" aObjectValue{11}:="OK" aObjectPos{11}{1}:=335 aObjectPos{11}{2}:=105 aObjectPos{11}{3}:=435 aObjectPos{11}{4}:=127 aObjectType{12}:="Abort" aObjectValue{12}:="Cancel" aObjectPos{12}{1}:=225 aObjectPos{12}{2}:=105 aObjectPos{12}{3}:=325 aObjectPos{12}{4}:=127 Generic_Selection (440;133;->aObjectType;->aObjectValue;->aObjectPos;->aResults) If (OK=1) My_Alert(aResults{6}) End if |
Example codes for alerts and requests
Um eine Message box anzuzeigen: |
Kopiere Code |
---|---|
My_ALERT ("Test") My_ALERT2 ("Test1";"Test2";"Test3") |
Bestätigungsdialog |
Kopiere Code |
---|---|
My_CONFIRM ("Please confirm") If (OK=1) My_ALERT ("confirmed") End if |
Werteabfrage |
Kopiere Code |
---|---|
vText:=My_REQUEST ("Please insert value") If (OK=1) My_ALERT (vText) End if |
Auswahlabfrage |
Kopiere Code |
---|---|
vNum:=My_Choice ("Alternative 1";"Alternative 2") Case of : (OK=0) // Cancel : (vNum=1) My_ALERT ("You have chosen Alternativ 1") : (vNum=0) My_ALERT ("You have chosen Alternative 2") End case |
Auswahlliste |
Kopiere Code |
---|---|
ARRAY TEXT(cbodynamiccbo;3) cbodynamiccbo{1}:="Value 1" cbodynamiccbo{2}:="Value 2" cbodynamiccbo{3}:="Value 3" cbodynamiccbo:=2 vText:=My_CBO ("Please choose") If (OK=1) My_ALERT (vText) End if |
Beispiel Code für Datumswahl:
Default Datum wird auf aktuelles Datum gesetzt |
Kopiere Code |
---|---|
cwSelectDate:=Current date(*) CW_SetPrefs CW_SetDate (cwSelectDate) CW_OpenDialog If (OK=1) My_ALERT ("Date is "+String(cwSelectDate)) End if |
Default Datum wird auf Monatsersten gesetzt |
Kopiere Code |
---|---|
cwSelectDate:=date("01."+string(month of (current date(*)))+"."+string(year of (current date(*)))) CW_SetPrefs CW_SetDate (cwSelectDate) CW_OpenDialog If (OK=1) My_ALERT ("date is "+String(cwSelectDate)) End if |
Default Datum ist immer aktuelles Datum |
Kopiere Code |
---|---|
CW_SetPrefs CW_SetDate CW_OpenDialog If (OK=1) My_ALERT ("date is "+String(cwSelectDate)) End if |
Eine komplette Übersicht über interne 4D Befehle kann im 4D Documentation Center abgerufen werden:
http://doc.4d.com/4Dv12/4D/12.4/4D-Programmiersprache.100-976885.de.html